#!/bin/sh
# Test if chmd_md5 expands chm files identically to Microsoft's HH.EXE -DECOMPILE

[ -d .cache ] || mkdir .cache
BASEDIR=`dirname $0`

cnt=1
for chm in "$@"; do
    name=`printf '%d/%d %s' $cnt $# $chm`; cnt=`expr $cnt + 1`

    echo "test $name"
    cached=`echo $chm | sed -e 's/\//-/g' -e 's/^/.cache\//'`
    if [ ! -s $cached ]; then
        $BASEDIR/msdecompile_md5 $chm >.orig.out 2>.orig.err
        if [ -s .orig.err ]; then
            echo "FAIL $name: MS errors" >&2
            cat .orig.err >&2
        else
            LANG=C sort -k2 .orig.out >$cached
        fi
    fi

    $BASEDIR/chmd_md5 $chm >.test.out 2>.test.errwarn
    perl -pe 'if($.>1){$_=""if/^[0-9a-f]{32} \/[#\$]/;s{ /}{  }}' .test.out | LANG=C sort -k2 >.test.sorted
    sed '/^WARNING; /d' .test.errwarn > .test.err
    if [ -s .test.err ]; then
        echo "FAIL $name: errors" >&2
        cat .test.errwarn >&2
    fi

    if cmp $cached .test.sorted >/dev/null; then
        echo "OK   $name"
    else
       if [ `diff $cached .test.sorted | grep -c '^<'` -gt 0 ]; then
           echo "FAIL $name: differences" >&2
           diff -u $cached .test.sorted >&2
       else
           echo "OK   $name (better than hh.exe)"
       fi
    fi
done
rm -f .orig.out .orig.err .test.out .test.err .test.errwarn .test.sorted
